#line 1 "..\\app\\APP\\md5.c"











 




 

#line 1 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"
 
 
 
 




 








 












#line 38 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"


  



    typedef unsigned int size_t;    
#line 54 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"




extern __declspec(__nothrow) void *memcpy(void * __restrict  ,
                    const void * __restrict  , size_t  ) __attribute__((__nonnull__(1,2)));
   




 
extern __declspec(__nothrow) void *memmove(void *  ,
                    const void *  , size_t  ) __attribute__((__nonnull__(1,2)));
   







 
extern __declspec(__nothrow) char *strcpy(char * __restrict  , const char * __restrict  ) __attribute__((__nonnull__(1,2)));
   




 
extern __declspec(__nothrow) char *strncpy(char * __restrict  , const char * __restrict  , size_t  ) __attribute__((__nonnull__(1,2)));
   





 

extern __declspec(__nothrow) char *strcat(char * __restrict  , const char * __restrict  ) __attribute__((__nonnull__(1,2)));
   




 
extern __declspec(__nothrow) char *strncat(char * __restrict  , const char * __restrict  , size_t  ) __attribute__((__nonnull__(1,2)));
   






 






 

extern __declspec(__nothrow) int memcmp(const void *  , const void *  , size_t  ) __attribute__((__nonnull__(1,2)));
   





 
extern __declspec(__nothrow) int strcmp(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));
   




 
extern __declspec(__nothrow) int strncmp(const char *  , const char *  , size_t  ) __attribute__((__nonnull__(1,2)));
   






 
extern __declspec(__nothrow) int strcasecmp(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));
   





 
extern __declspec(__nothrow) int strncasecmp(const char *  , const char *  , size_t  ) __attribute__((__nonnull__(1,2)));
   






 
extern __declspec(__nothrow) int strcoll(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));
   







 

extern __declspec(__nothrow) size_t strxfrm(char * __restrict  , const char * __restrict  , size_t  ) __attribute__((__nonnull__(2)));
   













 


#line 193 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"
extern __declspec(__nothrow) void *memchr(const void *  , int  , size_t  ) __attribute__((__nonnull__(1)));

   





 

#line 209 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"
extern __declspec(__nothrow) char *strchr(const char *  , int  ) __attribute__((__nonnull__(1)));

   




 

extern __declspec(__nothrow) size_t strcspn(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));
   




 

#line 232 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"
extern __declspec(__nothrow) char *strpbrk(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));

   




 

#line 247 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"
extern __declspec(__nothrow) char *strrchr(const char *  , int  ) __attribute__((__nonnull__(1)));

   





 

extern __declspec(__nothrow) size_t strspn(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));
   



 

#line 270 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"
extern __declspec(__nothrow) char *strstr(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));

   





 

extern __declspec(__nothrow) char *strtok(char * __restrict  , const char * __restrict  ) __attribute__((__nonnull__(2)));
extern __declspec(__nothrow) char *_strtok_r(char *  , const char *  , char **  ) __attribute__((__nonnull__(2,3)));

extern __declspec(__nothrow) char *strtok_r(char *  , const char *  , char **  ) __attribute__((__nonnull__(2,3)));

   

































 

extern __declspec(__nothrow) void *memset(void *  , int  , size_t  ) __attribute__((__nonnull__(1)));
   



 
extern __declspec(__nothrow) char *strerror(int  );
   





 
extern __declspec(__nothrow) size_t strlen(const char *  ) __attribute__((__nonnull__(1)));
   



 

extern __declspec(__nothrow) size_t strlcpy(char *  , const char *  , size_t  ) __attribute__((__nonnull__(1,2)));
   
















 

extern __declspec(__nothrow) size_t strlcat(char *  , const char *  , size_t  ) __attribute__((__nonnull__(1,2)));
   






















 

extern __declspec(__nothrow) void _membitcpybl(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitcpybb(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitcpyhl(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitcpyhb(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitcpywl(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitcpywb(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitmovebl(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitmovebb(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitmovehl(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitmovehb(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitmovewl(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) void _membitmovewb(void *  , const void *  , int  , int  , size_t  ) __attribute__((__nonnull__(1,2)));
    














































 







#line 502 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\string.h"



 

#line 20 "..\\app\\APP\\md5.c"
#line 1 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\stdio.h"
 
 
 





 






 







 




  
 








#line 47 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\stdio.h"


  



    typedef unsigned int size_t;    









 
 

 



    typedef struct __va_list __va_list;






   




 




typedef struct __fpos_t_struct {
    unsigned __int64 __pos;
    



 
    struct {
        unsigned int __state1, __state2;
    } __mbstate;
} fpos_t;
   


 


   

 

typedef struct __FILE FILE;
   






 

#line 136 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\stdio.h"


extern FILE __stdin, __stdout, __stderr;
extern FILE *__aeabi_stdin, *__aeabi_stdout, *__aeabi_stderr;

#line 166 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\stdio.h"
    

    

    





     



   


 


   


 

   



 

   


 




   


 





    


 






extern __declspec(__nothrow) int remove(const char *  ) __attribute__((__nonnull__(1)));
   





 
extern __declspec(__nothrow) int rename(const char *  , const char *  ) __attribute__((__nonnull__(1,2)));
   








 
extern __declspec(__nothrow) FILE *tmpfile(void);
   




 
extern __declspec(__nothrow) char *tmpnam(char *  );
   











 

extern __declspec(__nothrow) int fclose(FILE *  ) __attribute__((__nonnull__(1)));
   







 
extern __declspec(__nothrow) int fflush(FILE *  );
   







 
extern __declspec(__nothrow) FILE *fopen(const char * __restrict  ,
                           const char * __restrict  ) __attribute__((__nonnull__(1,2)));
   








































 
extern __declspec(__nothrow) FILE *freopen(const char * __restrict  ,
                    const char * __restrict  ,
                    FILE * __restrict  ) __attribute__((__nonnull__(2,3)));
   








 
extern __declspec(__nothrow) void setbuf(FILE * __restrict  ,
                    char * __restrict  ) __attribute__((__nonnull__(1)));
   




 
extern __declspec(__nothrow) int setvbuf(FILE * __restrict  ,
                   char * __restrict  ,
                   int  , size_t  ) __attribute__((__nonnull__(1)));
   















 
#pragma __printf_args
extern __declspec(__nothrow) int fprintf(FILE * __restrict  ,
                    const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   


















 
#pragma __printf_args
extern __declspec(__nothrow) int _fprintf(FILE * __restrict  ,
                     const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   



 
#pragma __printf_args
extern __declspec(__nothrow) int printf(const char * __restrict  , ...) __attribute__((__nonnull__(1)));
   




 
#pragma __printf_args
extern __declspec(__nothrow) int _printf(const char * __restrict  , ...) __attribute__((__nonnull__(1)));
   



 
#pragma __printf_args
extern __declspec(__nothrow) int sprintf(char * __restrict  , const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   






 
#pragma __printf_args
extern __declspec(__nothrow) int _sprintf(char * __restrict  , const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   



 

#pragma __printf_args
extern __declspec(__nothrow) int snprintf(char * __restrict  , size_t  ,
                     const char * __restrict  , ...) __attribute__((__nonnull__(3)));
   















 

#pragma __printf_args
extern __declspec(__nothrow) int _snprintf(char * __restrict  , size_t  ,
                      const char * __restrict  , ...) __attribute__((__nonnull__(3)));
   



 
#pragma __scanf_args
extern __declspec(__nothrow) int fscanf(FILE * __restrict  ,
                    const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   






























 
#pragma __scanf_args
extern __declspec(__nothrow) int _fscanf(FILE * __restrict  ,
                     const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   



 
#pragma __scanf_args
extern __declspec(__nothrow) int scanf(const char * __restrict  , ...) __attribute__((__nonnull__(1)));
   






 
#pragma __scanf_args
extern __declspec(__nothrow) int _scanf(const char * __restrict  , ...) __attribute__((__nonnull__(1)));
   



 
#pragma __scanf_args
extern __declspec(__nothrow) int sscanf(const char * __restrict  ,
                    const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   








 
#pragma __scanf_args
extern __declspec(__nothrow) int _sscanf(const char * __restrict  ,
                     const char * __restrict  , ...) __attribute__((__nonnull__(1,2)));
   



 

 
extern __declspec(__nothrow) int vfscanf(FILE * __restrict  , const char * __restrict  , __va_list) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) int vscanf(const char * __restrict  , __va_list) __attribute__((__nonnull__(1)));
extern __declspec(__nothrow) int vsscanf(const char * __restrict  , const char * __restrict  , __va_list) __attribute__((__nonnull__(1,2)));

extern __declspec(__nothrow) int _vfscanf(FILE * __restrict  , const char * __restrict  , __va_list) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) int _vscanf(const char * __restrict  , __va_list) __attribute__((__nonnull__(1)));
extern __declspec(__nothrow) int _vsscanf(const char * __restrict  , const char * __restrict  , __va_list) __attribute__((__nonnull__(1,2)));

extern __declspec(__nothrow) int vprintf(const char * __restrict  , __va_list  ) __attribute__((__nonnull__(1)));
   





 
extern __declspec(__nothrow) int _vprintf(const char * __restrict  , __va_list  ) __attribute__((__nonnull__(1)));
   



 
extern __declspec(__nothrow) int vfprintf(FILE * __restrict  ,
                    const char * __restrict  , __va_list  ) __attribute__((__nonnull__(1,2)));
   






 
extern __declspec(__nothrow) int vsprintf(char * __restrict  ,
                     const char * __restrict  , __va_list  ) __attribute__((__nonnull__(1,2)));
   






 

extern __declspec(__nothrow) int vsnprintf(char * __restrict  , size_t  ,
                     const char * __restrict  , __va_list  ) __attribute__((__nonnull__(3)));
   







 

extern __declspec(__nothrow) int _vsprintf(char * __restrict  ,
                      const char * __restrict  , __va_list  ) __attribute__((__nonnull__(1,2)));
   



 
extern __declspec(__nothrow) int _vfprintf(FILE * __restrict  ,
                     const char * __restrict  , __va_list  ) __attribute__((__nonnull__(1,2)));
   



 
extern __declspec(__nothrow) int _vsnprintf(char * __restrict  , size_t  ,
                      const char * __restrict  , __va_list  ) __attribute__((__nonnull__(3)));
   



 
extern __declspec(__nothrow) int fgetc(FILE *  ) __attribute__((__nonnull__(1)));
   







 
extern __declspec(__nothrow) char *fgets(char * __restrict  , int  ,
                    FILE * __restrict  ) __attribute__((__nonnull__(1,3)));
   










 
extern __declspec(__nothrow) int fputc(int  , FILE *  ) __attribute__((__nonnull__(2)));
   







 
extern __declspec(__nothrow) int fputs(const char * __restrict  , FILE * __restrict  ) __attribute__((__nonnull__(1,2)));
   




 
extern __declspec(__nothrow) int getc(FILE *  ) __attribute__((__nonnull__(1)));
   







 




    extern __declspec(__nothrow) int (getchar)(void);

   





 
extern __declspec(__nothrow) char *gets(char *  ) __attribute__((__nonnull__(1)));
   









 
extern __declspec(__nothrow) int putc(int  , FILE *  ) __attribute__((__nonnull__(2)));
   





 




    extern __declspec(__nothrow) int (putchar)(int  );

   



 
extern __declspec(__nothrow) int puts(const char *  ) __attribute__((__nonnull__(1)));
   





 
extern __declspec(__nothrow) int ungetc(int  , FILE *  ) __attribute__((__nonnull__(2)));
   






















 

extern __declspec(__nothrow) size_t fread(void * __restrict  ,
                    size_t  , size_t  , FILE * __restrict  ) __attribute__((__nonnull__(1,4)));
   











 

extern __declspec(__nothrow) size_t __fread_bytes_avail(void * __restrict  ,
                    size_t  , FILE * __restrict  ) __attribute__((__nonnull__(1,3)));
   











 

extern __declspec(__nothrow) size_t fwrite(const void * __restrict  ,
                    size_t  , size_t  , FILE * __restrict  ) __attribute__((__nonnull__(1,4)));
   







 

extern __declspec(__nothrow) int fgetpos(FILE * __restrict  , fpos_t * __restrict  ) __attribute__((__nonnull__(1,2)));
   








 
extern __declspec(__nothrow) int fseek(FILE *  , long int  , int  ) __attribute__((__nonnull__(1)));
   














 
extern __declspec(__nothrow) int fsetpos(FILE * __restrict  , const fpos_t * __restrict  ) __attribute__((__nonnull__(1,2)));
   










 
extern __declspec(__nothrow) long int ftell(FILE *  ) __attribute__((__nonnull__(1)));
   











 
extern __declspec(__nothrow) void rewind(FILE *  ) __attribute__((__nonnull__(1)));
   





 

extern __declspec(__nothrow) void clearerr(FILE *  ) __attribute__((__nonnull__(1)));
   




 

extern __declspec(__nothrow) int feof(FILE *  ) __attribute__((__nonnull__(1)));
   


 
extern __declspec(__nothrow) int ferror(FILE *  ) __attribute__((__nonnull__(1)));
   


 
extern __declspec(__nothrow) void perror(const char *  );
   









 

extern __declspec(__nothrow) int _fisatty(FILE *   ) __attribute__((__nonnull__(1)));
    
 

extern __declspec(__nothrow) void __use_no_semihosting_swi(void);
extern __declspec(__nothrow) void __use_no_semihosting(void);
    





 











#line 985 "d:\\Keil_v5\\ARM\\ARMCC\\Bin\\..\\include\\stdio.h"



 

#line 21 "..\\app\\APP\\md5.c"
#line 1 "..\\app\\APP\\md5.h"











 




 




 




 






 




 




 



 
typedef struct
{
    unsigned int count[2];
    unsigned int state[4];
    unsigned char buffer[64];   
}MD5_CTX;
 
                         
#line 86 "..\\app\\APP\\md5.h"
void MD5Init(MD5_CTX *context);
void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen);
void MD5Final(MD5_CTX *context,unsigned char digest[16]);
void MD5Transform(unsigned int state[4],unsigned char block[64]);
void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len);
void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len);
 



#line 22 "..\\app\\APP\\md5.c"




 




 






 




 




 

unsigned char PADDING[]={0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
                         
void MD5Init(MD5_CTX *context)
{
     context->count[0] = 0;
     context->count[1] = 0;
     context->state[0] = 0x67452301;
     context->state[1] = 0xEFCDAB89;
     context->state[2] = 0x98BADCFE;
     context->state[3] = 0x10325476;
}
void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen)
{
    unsigned int i = 0,index = 0,partlen = 0;
    index = (context->count[0] >> 3) & 0x3F;
    partlen = 64 - index;
    context->count[0] += inputlen << 3;
    if(context->count[0] < (inputlen << 3))
       context->count[1]++;
    context->count[1] += inputlen >> 29;
    
    if(inputlen >= partlen)
    {
       memcpy(&context->buffer[index],input,partlen);
       MD5Transform(context->state,context->buffer);
       for(i = partlen;i+64 <= inputlen;i+=64)
           MD5Transform(context->state,&input[i]);
       index = 0;        
    }  
    else
    {
        i = 0;
    }
    memcpy(&context->buffer[index],&input[i],inputlen-i);
}
void MD5Final(MD5_CTX *context,unsigned char digest[16])
{
    unsigned int index = 0,padlen = 0;
    unsigned char bits[8];
    index = (context->count[0] >> 3) & 0x3F;
    padlen = (index < 56)?(56-index):(120-index);
    MD5Encode(bits,context->count,8);
    MD5Update(context,PADDING,padlen);
    MD5Update(context,bits,8);
    MD5Encode(digest,context->state,16);
}
void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len)
{
    unsigned int i = 0,j = 0;
    while(j < len)
    {
         output[j] = input[i] & 0xFF;  
         output[j+1] = (input[i] >> 8) & 0xFF;
         output[j+2] = (input[i] >> 16) & 0xFF;
         output[j+3] = (input[i] >> 24) & 0xFF;
         i++;
         j+=4;
    }
}
void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len)
{
     unsigned int i = 0,j = 0;
     while(j < len)
     {
           output[i] = (input[j]) |
                       (input[j+1] << 8) |
                       (input[j+2] << 16) |
                       (input[j+3] << 24);
           i++;
           j+=4; 
     }
}
void MD5Transform(unsigned int state[4],unsigned char block[64])
{
     unsigned int a = state[0];
     unsigned int b = state[1];
     unsigned int c = state[2];
     unsigned int d = state[3];
     unsigned int x[64];
     MD5Decode(x,block,64);
     { a += ((b & c) | (~b & d)) + x[ 0] + 0xd76aa478; a = ((a << 7) | (a >> (32-7))); a += b; };  
	 { d += ((a & b) | (~a & c)) + x[ 1] + 0xe8c7b756; d = ((d << 12) | (d >> (32-12))); d += a; };  
	 { c += ((d & a) | (~d & b)) + x[ 2] + 0x242070db; c = ((c << 17) | (c >> (32-17))); c += d; };  
	 { b += ((c & d) | (~c & a)) + x[ 3] + 0xc1bdceee; b = ((b << 22) | (b >> (32-22))); b += c; };  
	 { a += ((b & c) | (~b & d)) + x[ 4] + 0xf57c0faf; a = ((a << 7) | (a >> (32-7))); a += b; };  
	 { d += ((a & b) | (~a & c)) + x[ 5] + 0x4787c62a; d = ((d << 12) | (d >> (32-12))); d += a; };  
	 { c += ((d & a) | (~d & b)) + x[ 6] + 0xa8304613; c = ((c << 17) | (c >> (32-17))); c += d; };  
	 { b += ((c & d) | (~c & a)) + x[ 7] + 0xfd469501; b = ((b << 22) | (b >> (32-22))); b += c; };  
	 { a += ((b & c) | (~b & d)) + x[ 8] + 0x698098d8; a = ((a << 7) | (a >> (32-7))); a += b; };  
	 { d += ((a & b) | (~a & c)) + x[ 9] + 0x8b44f7af; d = ((d << 12) | (d >> (32-12))); d += a; };  
	 { c += ((d & a) | (~d & b)) + x[10] + 0xffff5bb1; c = ((c << 17) | (c >> (32-17))); c += d; };  
	 { b += ((c & d) | (~c & a)) + x[11] + 0x895cd7be; b = ((b << 22) | (b >> (32-22))); b += c; };  
	 { a += ((b & c) | (~b & d)) + x[12] + 0x6b901122; a = ((a << 7) | (a >> (32-7))); a += b; };  
	 { d += ((a & b) | (~a & c)) + x[13] + 0xfd987193; d = ((d << 12) | (d >> (32-12))); d += a; };  
	 { c += ((d & a) | (~d & b)) + x[14] + 0xa679438e; c = ((c << 17) | (c >> (32-17))); c += d; };  
	 { b += ((c & d) | (~c & a)) + x[15] + 0x49b40821; b = ((b << 22) | (b >> (32-22))); b += c; };  
	 
	  
	 { a += ((b & d) | (c & ~d)) + x[ 1] + 0xf61e2562; a = ((a << 5) | (a >> (32-5))); a += b; };  
	 { d += ((a & c) | (b & ~c)) + x[ 6] + 0xc040b340; d = ((d << 9) | (d >> (32-9))); d += a; };  
	 { c += ((d & b) | (a & ~b)) + x[11] + 0x265e5a51; c = ((c << 14) | (c >> (32-14))); c += d; };  
	 { b += ((c & a) | (d & ~a)) + x[ 0] + 0xe9b6c7aa; b = ((b << 20) | (b >> (32-20))); b += c; };  
	 { a += ((b & d) | (c & ~d)) + x[ 5] + 0xd62f105d; a = ((a << 5) | (a >> (32-5))); a += b; };  
	 { d += ((a & c) | (b & ~c)) + x[10] + 0x2441453; d = ((d << 9) | (d >> (32-9))); d += a; };  
	 { c += ((d & b) | (a & ~b)) + x[15] + 0xd8a1e681; c = ((c << 14) | (c >> (32-14))); c += d; };  
	 { b += ((c & a) | (d & ~a)) + x[ 4] + 0xe7d3fbc8; b = ((b << 20) | (b >> (32-20))); b += c; };  
	 { a += ((b & d) | (c & ~d)) + x[ 9] + 0x21e1cde6; a = ((a << 5) | (a >> (32-5))); a += b; };  
	 { d += ((a & c) | (b & ~c)) + x[14] + 0xc33707d6; d = ((d << 9) | (d >> (32-9))); d += a; };  
	 { c += ((d & b) | (a & ~b)) + x[ 3] + 0xf4d50d87; c = ((c << 14) | (c >> (32-14))); c += d; };  
	 { b += ((c & a) | (d & ~a)) + x[ 8] + 0x455a14ed; b = ((b << 20) | (b >> (32-20))); b += c; };  
	 { a += ((b & d) | (c & ~d)) + x[13] + 0xa9e3e905; a = ((a << 5) | (a >> (32-5))); a += b; };  
	 { d += ((a & c) | (b & ~c)) + x[ 2] + 0xfcefa3f8; d = ((d << 9) | (d >> (32-9))); d += a; };  
	 { c += ((d & b) | (a & ~b)) + x[ 7] + 0x676f02d9; c = ((c << 14) | (c >> (32-14))); c += d; };  
	 { b += ((c & a) | (d & ~a)) + x[12] + 0x8d2a4c8a; b = ((b << 20) | (b >> (32-20))); b += c; };  
	 
	  
	 { a += (b^c^d) + x[ 5] + 0xfffa3942; a = ((a << 4) | (a >> (32-4))); a += b; };  
	 { d += (a^b^c) + x[ 8] + 0x8771f681; d = ((d << 11) | (d >> (32-11))); d += a; };  
	 { c += (d^a^b) + x[11] + 0x6d9d6122; c = ((c << 16) | (c >> (32-16))); c += d; };  
	 { b += (c^d^a) + x[14] + 0xfde5380c; b = ((b << 23) | (b >> (32-23))); b += c; };  
	 { a += (b^c^d) + x[ 1] + 0xa4beea44; a = ((a << 4) | (a >> (32-4))); a += b; };  
	 { d += (a^b^c) + x[ 4] + 0x4bdecfa9; d = ((d << 11) | (d >> (32-11))); d += a; };  
	 { c += (d^a^b) + x[ 7] + 0xf6bb4b60; c = ((c << 16) | (c >> (32-16))); c += d; };  
	 { b += (c^d^a) + x[10] + 0xbebfbc70; b = ((b << 23) | (b >> (32-23))); b += c; };  
	 { a += (b^c^d) + x[13] + 0x289b7ec6; a = ((a << 4) | (a >> (32-4))); a += b; };  
	 { d += (a^b^c) + x[ 0] + 0xeaa127fa; d = ((d << 11) | (d >> (32-11))); d += a; };  
	 { c += (d^a^b) + x[ 3] + 0xd4ef3085; c = ((c << 16) | (c >> (32-16))); c += d; };  
	 { b += (c^d^a) + x[ 6] + 0x4881d05; b = ((b << 23) | (b >> (32-23))); b += c; };  
	 { a += (b^c^d) + x[ 9] + 0xd9d4d039; a = ((a << 4) | (a >> (32-4))); a += b; };  
	 { d += (a^b^c) + x[12] + 0xe6db99e5; d = ((d << 11) | (d >> (32-11))); d += a; };  
	 { c += (d^a^b) + x[15] + 0x1fa27cf8; c = ((c << 16) | (c >> (32-16))); c += d; };  
	 { b += (c^d^a) + x[ 2] + 0xc4ac5665; b = ((b << 23) | (b >> (32-23))); b += c; };  
	 
	  
	 { a += (c ^ (b | ~d)) + x[ 0] + 0xf4292244; a = ((a << 6) | (a >> (32-6))); a += b; };  
	 { d += (b ^ (a | ~c)) + x[ 7] + 0x432aff97; d = ((d << 10) | (d >> (32-10))); d += a; };  
	 { c += (a ^ (d | ~b)) + x[14] + 0xab9423a7; c = ((c << 15) | (c >> (32-15))); c += d; };  
	 { b += (d ^ (c | ~a)) + x[ 5] + 0xfc93a039; b = ((b << 21) | (b >> (32-21))); b += c; };  
	 { a += (c ^ (b | ~d)) + x[12] + 0x655b59c3; a = ((a << 6) | (a >> (32-6))); a += b; };  
	 { d += (b ^ (a | ~c)) + x[ 3] + 0x8f0ccc92; d = ((d << 10) | (d >> (32-10))); d += a; };  
	 { c += (a ^ (d | ~b)) + x[10] + 0xffeff47d; c = ((c << 15) | (c >> (32-15))); c += d; };  
	 { b += (d ^ (c | ~a)) + x[ 1] + 0x85845dd1; b = ((b << 21) | (b >> (32-21))); b += c; };  
	 { a += (c ^ (b | ~d)) + x[ 8] + 0x6fa87e4f; a = ((a << 6) | (a >> (32-6))); a += b; };  
	 { d += (b ^ (a | ~c)) + x[15] + 0xfe2ce6e0; d = ((d << 10) | (d >> (32-10))); d += a; };  
	 { c += (a ^ (d | ~b)) + x[ 6] + 0xa3014314; c = ((c << 15) | (c >> (32-15))); c += d; };  
	 { b += (d ^ (c | ~a)) + x[13] + 0x4e0811a1; b = ((b << 21) | (b >> (32-21))); b += c; };  
	 { a += (c ^ (b | ~d)) + x[ 4] + 0xf7537e82; a = ((a << 6) | (a >> (32-6))); a += b; };  
	 { d += (b ^ (a | ~c)) + x[11] + 0xbd3af235; d = ((d << 10) | (d >> (32-10))); d += a; };  
	 { c += (a ^ (d | ~b)) + x[ 2] + 0x2ad7d2bb; c = ((c << 15) | (c >> (32-15))); c += d; };  
	 { b += (d ^ (c | ~a)) + x[ 9] + 0xeb86d391; b = ((b << 21) | (b >> (32-21))); b += c; };  
     state[0] += a;
     state[1] += b;
     state[2] += c;
     state[3] += d;
}




 
























 

